/*******************************************************************************
 * Copyright 2011 Alexandre Zglav and Morphiastic
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package com.morphiastic.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.morphiastic.analysis.analyzers.ElasticAnalyzerType;




/**
 * The definition of an analyzer that is reusab le accross multiple Analyzer annotated fields
 * 
 * Does pretty much the same job as "@Analzer" except it is a reusable / referencable definition 
 * 
 * 
 * @author Alex
 *
 */
@Retention( RetentionPolicy.RUNTIME )
@Target( {ElementType.TYPE} )
@Documented
public @interface AnalyzerDefinition {
	
	/**
	 * The type of analyzer 
	 * defaults to standard
	 * @return
	 */
	ElasticAnalyzerType type() default ElasticAnalyzerType.standard;
	
	/**
	 * Name of the analyzer as it will appear in ElasticSearch
	 * Will be used as an alias if an equivalent definition
	 * already existed
	 * 
	 * will default to the analyzer type name if not provided
	 * and if the analyzer is not a "custom" analyzer
	 * 
	 * if the analyzer is a custom analyzer an exception will be thrown 
	 * during annotations lookup as we MUST 
	 * have a name for a custom analyzer
	 * 
	 * @return
	 */
	String defName() default "";
	
	/**
	 * Optional array of parameters for this Analyzer definition
	 * @return
	 */
	Parameter[] parameters() default {};
	
//	Class<?> params() default void.class;
//	String paramsMethod() default "getParams";


}
